import jwt
from django.http import JsonResponse
from drf_spectacular.utils import OpenApiParameter

from TasteLink0 import settings

SUCCESS = (200, "操作成功")
UNAUTHORIZED = (401, "请先登录")
FORBIDDEN = (403, "权限不足")
NOT_FOUND = (404, "资源不存在")
INTERNAL_ERROR = (500, "服务器内部错误")

from rest_framework.response import Response
from datetime import datetime, timedelta
from django.utils import timezone

def parse_and_format_time(dt):
    """
    将 datetime 对象转换为北京时间，并格式化为字符串
    :param dt: datetime 对象（可以是时区敏感或不敏感）
    :return: 北京时间字符串，如 "2025-04-05 14:30:00"
    """
    if dt.tzinfo is None:
        # 如果没有时区信息，假设是 UTC
        dt = timezone.make_aware(dt, timezone.utc)

    # 转换为北京时间
    beijing_time = dt.astimezone(timezone.get_current_timezone())
    return beijing_time.strftime("%Y-%m-%d %H:%M:%S")


def make_response(code=200, message="操作成功", data=None):
    """
    统一格式的 JSON 响应构造器
    """
    return Response({
        "code": code,
        "message": message,
        "data": data
    }, status=code)


def decode_jwt_token(token):
    """
    解析并验证 JWT Token
    :param token: str, 待解析的 Token 字符串
    :return: dict, 解码后的 payload 数据
    :raises: AuthenticationFailed 或其子类（如 Token 失效、非法格式等）
    """
    # 解码 Token
    payload = jwt.decode(
        token,
        settings.SECRET_KEY,
        algorithms=['HS256']
    )
    return payload

AUTH_HEADER_PARAM = OpenApiParameter(
    name='Auth',
    type=str,
    location=OpenApiParameter.HEADER,
    description='JWT Token，格式为 `Bearer <token>`'

)
import base64
from django.core.exceptions import ValidationError
def decode_base64_image(image_data, mime_type):
    """
    将 Base64 图片数据解码为二进制
    :param image_data: Base64 字符串
    :param mime_type: MIME 类型
    :return: bytes
    """
    if not image_data or not mime_type:
        raise ValidationError("缺少图片数据或 MIME 类型")

    try:
        return base64.b64decode(image_data)
    except (TypeError, ValueError) as e:
        raise ValidationError(f"Base64 解码失败: {e}")